package net.siufung.boot.datasource.converts;

import net.siufung.boot.datasource.enums.DbTypes;
import net.siufung.boot.datasource.rules.IColumnType;
import net.siufung.boot.datasource.rules.IColumnTypeConvert;
import net.siufung.core.utils.select.BranchBuilder;
import net.siufung.core.utils.select.Selector;

/**
 * @author 陈建峰
 * @since 2022/8/12 3:41 下午
 */
public class ColumnTypeConverts {

    /**
     * 查询数据库类型对应的类型转换器
     *
     * @param dbTypes 数据库类型
     * @return 返回转换器
     */
    public static IColumnTypeConvert getTypeConvert(DbTypes dbTypes) {
        switch (dbTypes) {
            case MYSQL_8:
            case MYSQL_5:
                return MySql5TypeConvert.INSTANCE;
            default:
                break;
        }
        return null;
    }

    /**
     * 使用指定参数构建一个选择器
     * @param params 参数
     * @return 返回选择器
     */
    static Selector<String, IColumnType> use(String params) {
        return new Selector<>(params.toLowerCase());
    }

    /**
     * 这个分支构建器用于构建用于支持
     * @param value 分支的值
     * @return 返回分支构建器
     * @see #containsAny(CharSequence...)
     */
    static BranchBuilder<String, IColumnType> contains(CharSequence value) {
        return BranchBuilder.of(s -> s.contains(value));
    }

    /**
     * @see #contains(CharSequence)
     */
    static BranchBuilder<String, IColumnType> containsAny(CharSequence... values) {
        return BranchBuilder.of(s -> {
            for (CharSequence value : values) {
                if (s.contains(value)) {
                    return true;
                }
            }
            return false;
        });
    }
}
